import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import numpy as np
import plotly.express as px

# 设置pandas不换行显示
pd.set_option('expand_frame_repr', False)


# 获取中证2000历史数据
sz2000 = ak.index_zh_a_hist(symbol="932000", period="daily",start_date='20210101')
sz2000['日期'] = pd.to_datetime(sz2000['日期'])  # 转换为日期类型
sz2000 = sz2000.sort_values('日期')  # 按日期升序排序

# 获取沪深300历史数据
hs300 = ak.index_zh_a_hist(symbol="000300", period="daily",start_date='20210101')
hs300['日期'] = pd.to_datetime(hs300['日期'])
hs300 = hs300.sort_values('日期')

# 按日期合并数据（只保留双方共有的日期）
merged = pd.merge(sz2000[['日期', '成交额']], hs300[['日期', '成交额']], 
                  on='日期', how='inner', suffixes=('_sz2000', '_hs300'))

# 计算动态比值，并处理异常值
merged['动态比值'] = merged['成交额_sz2000'] / merged['成交额_hs300']
merged['动态比值'] = merged['动态比值'].replace([np.inf, -np.inf], np.nan)  # 替换无穷值
merged.dropna(subset=['动态比值'], inplace=True)  # 删除包含NaN的行

# 设置日期为索引
merged.set_index('日期', inplace=True)
print(merged.tail(10))

# 绘制图表
fig = px.line(x=merged.index, y=merged['动态比值'], labels={'x': '日期', 'y': "比值"}, title="中证2000与沪深300成交额动态比值")
# 显示图表
fig.show()
fig.write_html(f'image/zz2000_hs300_interactive.html')  # 保存为交互式HTML文件